package org.icop.frame;

import java.util.Collection;
import java.util.List;
import java.util.Set;

import org.icop.frame.boost.Booster;
import org.icop.frame.eval.Evaluator;
import org.icop.frame.search.Searcher;
import org.icop.frame.select.Selector;
import org.icop.model.MultiSet;
import org.icop.model.ValuedCorrespondence;
import org.jbpt.graph.abs.IEdge;
import org.jbpt.graph.abs.IGraph;
import org.jbpt.hypergraph.abs.IVertex;

/**
 * Interface for a matcher that follows the architecture of the ICoP framework
 * 
 * @author matthias weidlich
 *
 * @param <G>
 * @param <E>
 * @param <V>
 */
public interface IMatcher<G extends IGraph<E,V>, E extends IEdge<V>, V extends IVertex> {

	public Set<ValuedCorrespondence<V>> match(G sg1, G sg2);

	public Set<ValuedCorrespondence<V>> match(G sg1, G sg2, Collection<V> nodesInSg1,Collection<V> nodesInSg2);

	public List<Searcher<G, E, V>> getSearchers();
	
	public Evaluator<G, E, V> getEvaluator();
	
	public Selector<G, E, V> getSelector();
	
	public List<Booster<G, E, V>> getBoosters();
	
	public MultiSet<ValuedCorrespondence<V>> getViableMappings();
}
